在 iT 邦幫忙 PO 一篇完全不需要 coding 的技術文章,是否搞錯了什麼?
新年快樂~修復之前寫死 Cookie 導致的問題。
Github:
https://github.com/dang113108/591_rent
Commit: https://github.com/dang113108/591_rent/commit/4d6de2f7ee527cf450f17894fcc17935062fe895
修復因 591 改版導致整組壞掉的問題!
Github: https://github.com/dang113108/591_rent/tree/dev
感謝邦友 flier268, travis668 幫忙修復因 591 改版導致抓不到 cover image 的問題!
Github: https://github.com/dang113108/591_rent/tree/dev
感謝邦友 Chil 幫忙抓到一個 Bug,如果有在之前嘗試使用失敗的朋友再麻煩覆蓋最新版本的 Code 或直接重來一次,謝謝!
Github: https://github.com/dang113108/591_rent/tree/dev
現在房子合約是到六月底,有鑑於租的地方離公司及市區有大概半小時的車程,因此在過完年後的二月中我認為差不多可以開始找下一間房子了。
剛好我的朋友 Robin 在我們的群組分享了他寫的 rentHouse 這個工具,透過 node.js 自己去架設一個 server 來爬 591 的資訊並且推播到 LINE Notify,讓我們可以即時追蹤新發布的物件,效果其實已經相當不錯。但是我沒用,對不起,我沒用
但這次要分享的算是基於他的想法以及我之前使用過 Google Sheet 的經驗來開發的,透過 Google Apps Script 內建的「觸發條件」我們可以設定每分鐘爬一次 591 的資訊,並且一樣推播到 LINE Notify 外,我們還可以將這些資料統整至 Google Sheet 上,去篩選哪些是我可以考慮的,而哪些是我不想要的;而最重要的-不需要任何指令、npm、或安裝額外的東西,只要根據這篇文章的教學,任何人都可以自己架設一個!
標題有點詐騙,
因為設定完成後不需要任何按鍵就會自動推播你想看到的資訊(?)
開始設定!
Google Sheet link: 591 Rent Template
591 link: https://rent.591.com.tw/
開發人員工具開啟方式:Google Chrome
LINE Notify 首頁:https://notify-bot.line.me/zh_TW/
請注意必須保留雙引號的部分



在以上步驟都完成後,Google Apps Script 便會根據你所設定的條件每分鐘去爬一次 591 的資料,並儲存到你所建立的 Google Sheet 以及推播到你的 LINE Notify。
如果過了一分鐘後都沒有任何通知或更新,有可能是剛好過去一兩分鐘都沒有新的物件,所以請不用擔心、繼續等待
以上分享,有任何問題歡迎留言提問 : )
Github: https://github.com/dang113108/591_rent
推好文
如果有人看完要自用的話應該沒什麼問題,但如果有其他用途要注意一下爬蟲資料的使用目的與法律問題
前陣子滿多人傳的判決案例QQ
https://www.netadmin.com.tw/netadmin/zh-tw/viewpoint/BC05E753C27943AB93187936A8F25B7E
非常感謝你的補充。
老實說從之前學習爬蟲開始都沒有想過會有這種問題,
還好沒有做傻事不然可能已經賠到跟現在一樣窮了 (?)
好文~謝謝分享
最近剛好有租屋需求~
然後城市的部分是不是還需要更改${cookie}; urlJumpIp=8 才能搜尋對應城市?
(打算搜尋北部租屋結果沒任何資料,最後亂改了這部分才正常爬到資料XD)
非常感謝你的實測,
我忘記那個變數了…超抱歉,
馬上更新一下!
已經更新 :)
如果有需要可以直接覆蓋 Code 的部分就好 XD
Github: https://github.com/dang113108/591_rent/blob/dev/index.js
非常感謝你!
推好文!!
最近剛好有租屋需求,這對我這個新手也很友善
但我實作的時候有遇到一個問題,在check_rent_item_no_duplicated那裡
let list_sheet = SpreadsheetApp.getActive().getSheetByName(search_sheet);
let type_array = list_sheet.getRange("M2:M").getValues();
會報錯,報錯內容:
TypeError: Cannot read property 'getRange' of null
但我把search_sheet那裡直接改成裡直接改成工作表名稱就可以了,如下:
let list_sheet = SpreadsheetApp.getActive().getSheetByName("list");
想請問為何會這樣?謝謝!
Hi! 首先,很高興這篇文章對你有幫助
而對於你提出的問題在我測試後沒有出現同樣的錯誤,
想請問是否有動到程式的其他部分呢?
都沒有改到其他程式的地方耶
我也不知道怎麼會有這個超不合邏輯的問題XD
不過我就先暫且這樣用好了~~謝謝:D
阿阿阿!!剛剛覺得越想越不符合邏輯
突然發現我沒有把要執行的函式改成main
抱歉擾民了QQ
還是謝謝你!!
哈哈哈沒關係,我沒想到有這樣的可能性 XD![]()
設定完
Linenotify的推播 租屋物件圖片好像都抓不到
全部都是大大的“沒“?
Sorry, 已有其他大大協助修好這個問題, 我已經 merge 進去了
我目前也遇到圖片讀取不到問題,我看一下應該是這段程式碼問題
const response = UrlFetchApp.fetch(rent_detail_url);
let html = response.getContentText();
let cover_img_regex = new RegExp(" <meta property=\"og:image\" content=\"(https:\/\/hp[0-9]\.591\.com\.tw\/house\/active\/[1-9][0-9]{3}\/[0-1][0-9]\/[0-3][0-9]\/[0-9]*_765x517\.water3\.jpg)\" \/>", "gi");
flier268 iT邦新手 5 級 ‧ 2021-07-28 09:59:28
修好囉
https://github.com/flier268/591_rent/commit/a88560f757a6c5dd1ec2bdd330bbd8fb053abd47
Hi, 非常感謝你的協助!! 但我已 merge 另一位大大修改的版本, 抱歉前陣子比較沒有空回復![]()
您好,我想請問一下
我照著您提供的教學實作後,LINE Notify 沒有收到訊息,請問我有什麼方法可以 debug?
另外,我想要base on你的分享,修改成 for 購買中古屋,請問可以我會需要修改哪部份的內容呢?
希望能幫忙解答,非常感謝!!
Hi, 可以先嘗試在裡面 log 看看到底有沒有抓到訊息?
另外也可以手動 call LINE Notify 看看有沒有設定成功
中古屋的部分有大大已經 Fork 出去做了一份, 你可以參考看看
https://github.com/vance0725/591_sale
中古屋的部分,目前main compile會碰到問題
SyntaxError: Unexpected token < in JSON at position 0
get_sale_data @ index.gs:130
main @ index.gs:200
感覺像是Json.parse這邊出現問題
我這邊執行 main 有遇到錯誤
SyntaxError: Unexpected token < in JSON at position 0
get_rent_data @ index.gs:87
main @ index.gs:122
不知道是因為591改版了嗎
Hi, 目前確認的確因 591 API Change 導致暫時失效,
待有空時會進行修復, 也歡迎有能力的大大幫推 PR !!
再麻煩了,能力不足,幫不上忙
Hi, 我已經修好囉, 如果還有需要的話可以從頭開始再做一次試試看
有問題再麻煩回報一下, 感謝
1/19後,我也發現main會有問題
SyntaxError: Unexpected token < in JSON at position 0
get_sale_data @ index.gs:130
main @ index.gs:200
還請大大幫忙了
goddbird
Check 後發現是 cookie 的問題,之前都是寫死的,這次改用關鍵字去抓,你可以參考這個 commit 去改你的
https://github.com/dang113108/591_rent/commit/4d6de2f7ee527cf450f17894fcc17935062fe895
復活了,真的非常感謝大大
真的要來讀一下node.js了,不然都還要麻煩樓主QQ
哈哈不會,不過這應該只需要原生 js 就足夠了,當然能夠多學是好事~
期待你之後可以開 PR 幫忙修 哈哈哈
非常感謝老大改好了,目前可以正常使用。我看了一下作者的SCRIPT,rent_item 存著某個物件的資料。
我現在想要多放一些資訊在line裡面,初步是可以做到另設變數來存放。這部分是沒問題的。但是現在卡在 rent_item 這一串
rent_tag=[{id=1, name=屋主直租}, {id=16, name=新上架}, {id=3, name=拎包入住}, {id=10, name=有電梯}, {name=隨時可遷入, id=5}, {id=6, name=可開伙}]
這串裡面的資料,像有無電梯、能否開伙,也想放在line訊息裡。不知道這該用什麼方式擷取呢
主要是透過 get_rent_result() 先去撈他的 API 回來,然後在 get_formated_rent_info() 格式化 API response,所以你可以在這邊看他的 API 回了哪些東西回來,然後把你要的東西塞進 tmp_array (要放在 Google sheet 上的資訊) 跟 line_message (會傳到 line 的訊息) 這兩個 Array 裡面
推好文
但目前遇到篩選條件為桃園市/有車位/租金10000-20000時
執行main時出現以下錯誤
TypeError: Cannot read property '1' of null
get_region_from_query @ index.gs:87
get_rent_result @ index.gs:141
get_rent_data @ index.gs:126
main @ index.gs:163
不知道是我哪些function要做修改呢?
發現可能是network貼的url複製錯誤 已改過就可以跑了
好的~抱歉沒能即時回覆
感謝!! 最近在延伸 利用下班的時候 修改您的code爬中古車網站 目前還在嘗試中
![]()
謝了 超有用 但因為line現在網址會有跳圖片 所以我就把payload的圖片刪了 感覺可以找到房ㄌ 讚
剛看了一下,手機有縮圖但電腦版沒有,所以如果會有需要用電腦版看的話可能還是留著比較好XD
確實 好像是 但是說為啥要設置notificationDisabled 一直沒跳通知還以為是我line的問題 原來還有這種操作
台大附近的房特難搶 非天龍人想一跳通知就電話過去搶第一個看房ㄌ 坐過去要快兩小時阿... 被搶好幾次ㄌQQ
太贊了!! ~~ 我居然也會
希望大大能夠多一些gas實例教學,多跟您學習![]()
![]()
Hi! 剛好看到信件,不曉得方不方便把 search_city & search_query 這兩行貼出來給我看一下?感謝
因為我目前在跑都正常 QQ
你回復太快了吧~這個回覆好像不能收回, 我剛查一下,已經用好了,感謝你
哈哈哈真的剛好收信看到通知,沒問題!
我在今天解析了 cookie 裡面有看到另外一組 key
urlJumpIpByTxt=%E5%8F%B0%E5%8C%97%E5%B8%82
是 urlencode 解碼後可以拿到 台北市
ref: https://www.urldecoder.org/
噢, 我看到程式碼裡面有了 XD
謝謝您!我的租屋超人
這個優點就真的是不用搞個vpc或者是主機上
現在591屋量算多,但另外一家租租通也逐漸變多了
不知道租租通能不能爬
不過我都是用mixrent條件可以下到路段
不知道mixrent能不能這樣做
照片對我來說沒有太重要,都要點進去看
請問最近使用會出現
Exception: Request failed for https://rent.591.com.tw returned code 403. Truncated server response:
從9/10號開始會出現此錯誤, 看起來是get_csrf_token抓不到東西,請問有大大知道怎麼修改嗎?
Exception: Request failed for https://sale.591.com.tw returned code 404. Truncated server response:
Exception: Request failed for https://sale.591.com.tw returned code 404. Truncated server response:
也遇到一樣問題
有解嗎...
今天好像忽然正常了